#
# specky: snippet file for rspec, to be used with the quite excellent
# 'snipmate' Vim plugin by Michael Sanders <msanders42+vim@gmail.com>.
# http://www.vim.org/scripts/script.php?script_id=2540
#
# $Id$
#

snippet .and and_raise()
	.and_raise( ${1:exception}.new("${2:message}") )
snippet .and and_return { }
	.and_return { ${1} }
snippet .and and_return()
	.and_return( ${1:value} )
snippet .and and_throw()
	.and_throw( ${1:sym} )
snippet .and and_yield()
	.and_yield( ${1:values} )
snippet .at at_least()
	.at_least( ${1:n} ).times
snippet .at at_most()
	.at_most( ${1:n} ).times
snippet .on
	.once
snippet .tw
	.twice
snippet .any
	.any_number_of_times
snippet des Describe subject
	describe "${1:subject}" do
		${2}
	end
snippet des Describe Type
	describe ${1:Type} do
		${2}
	end
snippet des Describe Type, description
	describe ${1:Type}, "${2:description}" do
		${3}
	end
snippet des Describe a shared group
	describe "${1:A Shared Thing}", :shared => true do
		${2}
	end
snippet it it block
	it "${1:should do something}" do
		${2}
	end
snippet it it (pending)
	it "${1:does something}"${2}
snippet .ex
	.exactly( ${1:n} ).times
snippet .w
	.with( ${1:args} )${2}
snippet con
	context "${1:context}" do
		${2}
	end
# this is the 'old' mock syntax (rspec 1.x)
# use 'double' for rspec 2.x
snippet mock
	${1:var} = mock( "${2:mock_name}"${3:, :null_object => true} )
	${4}
snippet dou
	${1:var} = double( "${2:double_name}" )${3:.as_null_object}
	${4}
snippet st
	stub!( :${1:expectation} ).with( ${2:args} ).and_return( ${3} )
snippet bef Before each test
	before( :each ) do
		${1}
	end
snippet bef Before all tests
	before( :all ) do
		${1}
	end
snippet aft After each test
	after( :each ) do
		${1}
	end
snippet aft After all tests
	after( :all ) do
		${1}
	end
snippet sh=
	${1:target}.should == ${2:value}
	${3}
snippet shn=
	${1:target}.should_not == ${2:value}
	${3}
snippet she
	${1:target}.should equal( ${2:value} )
	${3}
snippet shne
	${1:target}.should_not equal( ${2:value} )
	${3}
snippet shm Should contain
	${1:target}.should =~ /${2:regexp}/
	${3}
snippet shnm 
	${1:target}.should_not =~ /${2:regexp}/
	${3}
snippet shm Should match
	${1:target}.should match( /${2:regexp}/ )${3}
snippet shb
	${1:target}.should be( ${2:result} )
	${3}
snippet shnb
	${1:target}.should_not be( ${2:result} )
	${3}
snippet shbko
	${1:target}.should be_a_kind_of( ${2:klass} )
	${3}
snippet shnbko
	${1:target}.should_not be_a_kind_of( ${2:klass} )
	${3}
snippet shbio
	${1:target}.should be_instance_of( ${2:klass} )
	${3}
snippet shnbio
	${1:target}.should_not be_instance_of( ${2:klass} )
	${3}
snippet shbc
	${1:target}.should be_close( ${2:result}, ${3:tolerance} )
	${4}
snippet shnbc
	${1:target}.should_not be_close( ${2:result}, ${3:tolerance} )
	${4}
snippet shh
	${1:target}.should have( ${2:num} ).${3:things}
	${4}
snippet shhal
	${1:target}.should have_at_least( ${2:num} ).${3:things}
	${4}
snippet shham
	${1:target}.should have_at_most( ${2:num} ).${3:things}
	${4}
snippet shbp
	${1:target}.should ${2:be_${3:predicate}} ${4}
snippet shnbp
	${1:target}.should_not ${2:be_${3:predicate}} ${4}
snippet exre
	expect { ${1} }.to raise_exception( ${2:ErrorClass}, /${3:message match}/i )
	${4}
snippet exnre
	expect { ${1} }.to_not raise_exception( ${2:ErrorClass} )
	${3}
snippet shre
	lambda { ${1} }.should raise_exception( ${2:ErrorClass}, /${3:message match}/i )
	${4}
snippet shnre
	lambda { ${1} }.should_not raise_exception( ${2:ErrorClass} )
	${3}
snippet shr
	${1:mock}.should_receive( :${2:message} )${3}
snippet shnr
	${1:mock}.should_not_receive( :${2:message} )${3}
snippet shrt
	${1:target}.should respond_to( :${2:sym} )
snippet shnrt
	${1:target}.should_not respond_to( :${2:sym} )
snippet shbl
	it_should_behave_like "${1:shared behavior}"
	${2}
snippet sim
	def ${1:matcher_method}( expected )
		simple_matcher do |given, matcher|
			matcher.description = "${2:verb} with #{expected.inspect}"
			matcher.failure_message = "expected #{given.inspect} to $2 with #{expected.inspect}"
			matcher.negative_failure_message = "expected #{given.inspect} not to $2 with #{expected.inspect}"
			given.${3:...checks something and returns a boolean}
		end
	end
